package com.csi.jf.crucible.ptservice.service;

import java.util.List;

import com.chinasofti.ro.bizframework.core.orm.Page;
import com.chinasofti.ro.bizframework.core.orm.entity.Model;
import com.csi.jf.crucible.ptservice.model.CodePackages;
import com.csi.jf.crucible.ptservice.model.PrjAssociate;
import com.csi.jf.crucible.ptservice.model.SonarDaily;
import com.csi.jf.crucible.ptservice.model.Sonarservices;
import com.csi.jf.crucible.ptservice.model.ToolServices;
import com.csi.jf.crucible.ptservice.model.ToolservicesStatus;
import com.csi.jf.crucible.ptservice.model.ToolservicesUse;

/**
 *
 * 业务逻辑接口类，在此定义实现业务逻辑需要的方法，使用时请注意：
 *
 * 1、平台默认提供声明式事物
 *
 * 平台为所有以Service结尾的类中的以save，update，insert，delete，batch，execute等单词为开头的方法提供了事务控制.
 * 对有事物控制的方法平台会在需要的时候自动开启/关闭Connection.
 * 声明式事物在applicationContext-core.xml中的dsTransactionInterceptor中定义：
 * <property name="transactionAttributes">
 * <props>
 * <prop key="save*">PROPAGATION_REQUIRED</prop>
 * <prop key="insert*">PROPAGATION_REQUIRED</prop>
 * <prop key="create*">PROPAGATION_REQUIRED</prop>
 * <prop key="update*">PROPAGATION_REQUIRED</prop>
 * <prop key="delete*">PROPAGATION_REQUIRED</prop>
 * <prop key="remove*">PROPAGATION_REQUIRED</prop>
 * <prop key="batch*">PROPAGATION_REQUIRED</prop>
 * <prop key="execute*">PROPAGATION_REQUIRED</prop>
 * <prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>
 * <prop key="find*">PROPAGATION_REQUIRED,readOnly</prop><!-- readOnly表示是查询，一般在查询的方法时使用-->
 * <prop key="query*">PROPAGATION_REQUIRED,readOnly</prop>
 * <prop key="search*">PROPAGATION_REQUIRED,readOnly</prop>
 * </props>
 * </property>
 *
 * 除了上述默认外还可以自定义。比如现有load开头的方法用来查询数据库，数据库开启关闭想交给平台管理，只需要按下面的注册即可：
 * <prop key="load*">PROPAGATION_REQUIRED,readOnly</prop>
 *
 *
 * 2、除了声明式事物，还可以使用com.chinasofti.ro.bizframework.core.orm.Transaction类来在您的方法中使用编程式事务，如：
 * <pre>
 * public void myMethod(String id) {
 * Transaction.begin(); //开启事务
 * try {
 * ......
 * Transaction.commit(); //提交
 * } catch(Exception e) {
 * Transaction.rollback(); //回滚
 * }
 * }
 * </pre>
 *
 * 注意：在同一方法里，不要即使用声明式事务又使用编程式事务，
 * 更多内容请参考《ResourceOne5.0BizFoundation常见问题解答》中的3.1.1和3.1.2
 *
 * @author BizFoundation
 * @version 1.0
 * @since 1.0
 */
public interface SonarservicesService {
  	/**
	 * <p>根据id查询数据</p>
	 *
	 * @param id
	 * @return Model
	 */
	public Model findCodePacakgeById(Long id);


	/**
	 * <p>批量删除数据</p>
	 *
	 * @param ids
	 * @return int[] delete records
	 */
	public int[] batchDelete(String ids);

	/**
	 * <p>返回符合查询条件的页面结果
	 * @param Sonarservices
	 * @param page
	 * @return
	 */
	public Page findByPage(ToolservicesUse toolservicesUse, Page page);
	
	/**
	 * 保存数据
	 * @param Model
	 */
	public void save(Model model);
	
	/**
	 * 更新数据
	 * @param Model
	 */
	public void update(Model model);
	
	public void createWorkspace(Long projectId,SonarDaily sonarDaily);
	
	public void retreiveCodeFromPackage(Long codePackageId,SonarDaily sonarDaily);
	
	public void createSonarProjectCfg(CodePackages cp,PrjAssociate pc,SonarDaily sonarDaily) throws Exception;
	
	public void runSonarRunner(Long codePackageId,SonarDaily sonarDaily) throws Exception;
	
	public void getServiceStatus();
	
	public void getServiceLogs();
	
	public void clearWorkspace(Long projectId,SonarDaily sonarDaily);
	
	public void setProjectPermission(PrjAssociate cp);
	/**
	 * 根据prjID查询数据
	 */
	public PrjAssociate findByPrjID(Long prjID);
	/**
	 * 查询pts工具服务信息
	 */
	public List<ToolServices> findAllToolSer();
	/**
	 * 根据ID查询pts工具服务信息
	 */
	public ToolServices findToolSerByID(Long id);
	/**
	 * 查询pts工具服务相关所有信息
	 */
	public List<Model> findSerAllInfo(Long id);
	/**
	 * 查询pts工具服务关联项目的信息
	 */
	public ToolservicesUse findToolservicesUse(Long projetID,Long serviceId);

	
	public Sonarservices find(Sonarservices sonarservices);

    public String showSonarDashboardUrl(PrjAssociate prjAssociate);

    public ToolServices findToolServiceById(Long serviceId);

    public ToolservicesUse findToolServiceHistoryById(Long serviceHistoryId);

    public ToolservicesStatus findToolServiceStatus(Long projetId,
            Long serviceId);
    public Model find(Model model);
    
    public List<SonarDaily> findAllSonarDaily(Long serviceuseID);
	   
}